{{Extend "db/index"}}
{{Block "main"}}
<div class="row">
    <div class="col-md-12">
        {{Include "db/mysql/dbinfo_btn"}}
        <div class="block-flat">
          <div class="header">							
            <h3>
                {{if Form "host"}}
                {{"用户名"|T}}: {{Form "user"}}@{{Form "host"}}
                {{else}}
                {{"创建用户"|T}}
                {{end}}
            </h3>
          </div>
          <div class="content">
              <form class="form-horizontal group-border-dashed" method="POST" action="">
              <div class="form-group">
                <label class="col-sm-2 control-label">{{"服务器"|T}}</label>
                <div class="col-sm-9">
                    <input type="text" name="host" class="form-control" required="required" value="{{Form "host"}}">
                    <div class="help-block">{{"支持通配符“%”。例如：% 或者 192.168.10.%"|T}}</div>
                </div>
              </div>
              <div class="form-group">
                <label class="col-sm-2 control-label">{{"用户名"|T}}</label>
                <div class="col-sm-9">
                    <input type="text" name="user" class="form-control" required="required" value="{{Form "user"}}">
                </div>
              </div>
              <div class="form-group">
                <label class="col-sm-2 control-label">{{"密码"|T}}</label>
                <div class="col-sm-9">
                    <input type="hidden" name="oldUser" value="{{Stored.oldUser}}">
                    <input type="hidden" name="oldPass" value="{{Stored.oldPass}}">
                    <div class="input-group">
                    <input type="{{if Stored.hashed}}text{{else}}password{{end}}" name="pass" class="form-control" required="required" value="{{Form "pass"}}" id="passwd-input">
                        <label class="input-group-addon" data-popover="popover" data-original-title="{{"如果是输入原始密码请不要勾选此项；如果您已经通过MySQL的PASSWORD函数将密码加密过了请勾选此项"|T}}" data-content="" data-placement="top" data-trigger="hover">
                        <input type="checkbox" name="hashed" value='1'{{if Stored.hashed}} checked{{end}} onclick="$('#passwd-input').attr('type',this.checked?'text':'password');"> 
                        Hashed 
                        </label>
                    </div>
                    <div class="help-block">{{"如果是输入原始密码请不要勾选Hashed选项。Hashed选项仅用于您已经通过MySQL的PASSWORD函数将密码加密过了的情况"|T}}</div>
                </div>
              </div>
              <div class="form-group">
                <label class="col-sm-1 control-label"></label>
                <div class="col-sm-10">
                {{$sorts := Stored.sorts}}
                <div class="well hidden" id="grant-tips">
MySQL grant 权限，分别可以作用在多个层次上
                    <dl>
<dt>1. grant 作用在整个 MySQL 服务器上：</dt>
<dd>grant select on <code>*.*</code> to dba@localhost; -- dba 可以查询 MySQL 中所有数据库中的表。</dd>
<dd>grant all    on <code>*.*</code> to dba@localhost; -- dba 可以管理 MySQL 中的所有数据库</dd>

<dt>2. grant 作用在单个数据库上：</dt>
<dd>grant select on <code>testdb.*</code> to dba@localhost; -- dba 可以查询 testdb 中的表。</dd>

<dt>3. grant 作用在单个数据表上：</dt>
<dd>grant select, insert, update, delete on <code>testdb.orders</code> to dba@localhost;</dd>
<dd>这里在给一个用户授权多张表时，可以多次执行以上语句。例如：
<dd>grant select(user_id,username) on <code>smp.users</code> to mo_user@'%' identified by '123345';</dd>
<dd>grant select on <code>smp.mo_sms</code> to mo_user@'%' identified by '123345';</dd>

<dt>4. grant 作用在表中的列上：</dt>
<dd>grant select(id, se, rank) on <code>testdb.apache_log</code> to dba@localhost;</dd>

<dt>5. grant 作用在存储过程、函数上：</dt>
<dd>grant execute on <code>testdb.pr_add</code> to 'dba'@'localhost'</dd>
<dd>grant execute on <code>testdb.fn_add</code> to 'dba'@'localhost'</dd>
                    </dl>
                    上面示例中的<code>红色</code>部分就是下面输入框中的值。
                </div>
                <div class="table-responsive">
				<table class="table no-border hover blue">
					<thead class="no-border">
						<tr>
							<th colspan="2"><strong>{{"权限"|T}}</strong></th>
                            {{range $k,$object := $sorts}}
							<th style="max-width:300px">
                                {{if eq $object "*.*"}}
                                <input type='hidden' name='objects[]' value='*.*'>
                                <input type='hidden' name='scopes[]' value='all'>
                                <input type='hidden' name='databases[]' value=''>
                                <input type='hidden' name='tables[]' value=''>
                                <input type='hidden' name='columns[]' value=''>
                                <strong>*.*</strong>
                                {{else}}
                                {{$grant := getScope $object}}
                                <div class="input-group no-margin-bottom">
                                <span class="input-group-addon">{{"作用范围"|T}}</span>
                                <select id="select-priv-type-{{$k}}" name="scopes[]" data-col="{{$k}}" class="select-priv-type form-control">
                                    <option value=""{{if eq $grant.Scope ""}} selected{{end}}>{{"无"|T}}</option>
                                    {{if not Stored.hasGlobalScope}}
                                    <option value="all"{{if eq $grant.Scope "all"}} selected{{end}}>{{"全局"|T}}</option>
                                    {{end}}
                                    <option value="database"{{if eq $grant.Scope "database"}} selected{{end}}>{{"数据库"|T}}</option>
                                    <option value="table"{{if eq $grant.Scope "table"}} selected{{end}}>{{"表"|T}}</option>
                                    <option value="column"{{if eq $grant.Scope "column"}} selected{{end}}>{{"列"|T}}</option>
                                    <option value="proxy"{{if eq $grant.Scope "proxy"}} selected{{end}}>{{"代理"|T}}</option>
                                </select>
                                </div>
                                <div class="input-group no-margin-bottom onselect-priv-type" id="onselect-priv-type-{{$k}}">
                                <span class="input-group-addon proxy-user" title="{{"用户名@主机"|T}}">{{"用户"|T}}</span>
                                <input data-original="{{if eq $grant.Scope "proxy"}}{{$object}}{{end}}" type='hidden' id="objects-{{$k}}" class="form-control proxy-user" name='objects[]' value='{{$object}}'>
                                <span class="input-group-addon database-name">{{"库名"|T}}</span>
                                <input id='input-database-{{$k}}' name="databases[]" data-col="{{$k}}" class="form-control database-name" value='{{$grant.Database}}' pattern='^[a-zA-Z0-9_]+$' title="{{"库名仅支持输入字母、数字、下划线"|T}}">
                                <span class="input-group-addon table-name">{{"表名"|T}}</span>
                                <input id='input-table-{{$k}}' name="tables[]" data-col="{{$k}}" class="form-control table-name" value='{{$grant.Table}}' pattern='^[a-zA-Z0-9_]+$' title="{{"表名仅支持输入字母、数字、下划线"|T}}">
                                <span class="input-group-addon column-name">{{"列名"|T}}</span>
                                <input id='input-column-{{$k}}' name="columns[]" data-col="{{$k}}" class="form-control column-name" value='{{$grant.Columns}}' pattern='^[a-zA-Z0-9_]+(,[a-zA-Z0-9_]+)*$' title="{{"列名仅支持输入字母、数字、下划线，多列请用半角逗号隔开"|T}}">
                                </div>
                                <!-- 
                                <div class="input-group no-margin-bottom">
                                <input name='objects[]' class="form-control" value='{{$object}}' size='10' autocapitalize='off'>
                                <a href="javascript:;" onclick="$('#grant-tips').toggleClass('hidden');" class="input-group-addon"><i class="fa fa-question-circle"></i></a>
                                </div>
                                -->
                                {{end}}
                            </th>
                            {{end}}
						</tr>
					</thead>
					<tbody class="no-border-x" id="tbody-content">
                        {{$fGrant := Form "grant"}}
                        {{$list := Stored.list}}

                        {{range $index,$group := Stored.groups}}

                        {{if index $list $group.Value}}
                        {{range $privilege,$comment := index $list $group.Value}}
						<tr>
                            {{if eq $group.Value "_Global_"}}
                            <td colspan="2" title="{{if eq $privilege "All privileges"}}{{"所有权限"|T}}{{else if eq $privilege "Grant option"}}{{"分配权限"|T}}{{else}}{{$privilege}}{{end}}">{{$privilege}}</td>
                            {{else}}
                            <td>{{$group.Text}}</td>
                            <td>{{$privilege}}</td>
                            {{end}}
                            {{range $k,$object := $sorts}}
							<td>
                                {{$grant := getGrantsByKey $object}}
                                {{$value := getGrantByPrivilege $grant $k $group.Value $privilege}}
                                {{$name := fieldName $k $group.Value $privilege}}
                                {{if $fGrant}}
                                <select name="{{$name}}" class="PT-{{$group.Value}}-{{$k}}">
                                    <option value=""></option>
                                    <option value='1'{{if $value}} selected{{end}}>{{"授权"|T}}</option>
                                    <option value='0'{{if not $value}} selected{{end}}>{{"废除"|T}}</option>
                                </select>
                                {{else}}
                                <input class="PT-{{$group.Value}}-{{$k}}" type="checkbox" name="{{$name}}" value='1'{{if $value}} checked{{end}}{{if eq $privilege "All privileges"}} id='grants-{{$k}}-all'{{else if eq $privilege "Grant option"}}{{else}} onclick="if (this.checked) $('#grants-{{$k}}-all').prop('checked',false);"{{end}}>
                                {{end}}
                            </td>
                            {{end}}
						</tr>
                        {{end}}
                        {{end}}

                        {{end}}
					</tbody>
				</table>
			    </div>


                </div>
              </div>

              
              <div class="form-group">
				<div class="col-sm-9 col-sm-offset-2">
				  <button type="submit" class="btn btn-primary btn-lg"><i class="fa fa-save"></i> {{"保存"|T}}</button>
				  <a class="btn btn-default btn-lg" href="{{dbMgrURL "privileges"}}"><i class="fa fa-reply"></i> {{"返回"|T}}</a>
				</div>
			</div>
              </form>
          </div><!-- /.content -->
        </div><!-- /.block-flat -->
    </div>
</div>
{{/Block}}
{{Block "footer"}}
{{Super}}
<script>
$(function(){
$('.onselect-priv-type input').change(function(){
    var col=$(this).data('col');
    var ipt=$('#objects-'+col);
    switch($('#select-priv-type-'+col).val()){
        case 'all':
        break;
        case 'database':
        ipt.val($('#input-database-'+col).val()+'.*');
        break;
        case 'table':
        ipt.val($('#input-database-'+col).val()+'.'+$('#input-table-'+col).val());
        break;
        case 'column':
        ipt.val($('#input-database-'+col).val()+'.'+$('#input-table-'+col).val()+'('+$('#input-column-'+col).val()+')');
        break;
    }
});
$('.select-priv-type').change(function(){
    var col=$(this).data('col');
    var val=$(this).val();
    if(val!='proxy'){
        $('#objects-'+col).attr('type','hidden').removeAttr('pattern');
        $('#onselect-priv-type-'+col).find('.proxy-user').hide().siblings('.database-name').show();
    }
    switch(val){
        case 'proxy':
        $('#onselect-priv-type-'+col).show().find('.proxy-user').show().siblings(':not(.proxy-user)').hide();
        $('.PT-Server_Admin-'+col).prop('disabled',true);
        $('.PT-Databases-'+col).prop('disabled',true);
        $('.PT-Tables-'+col).prop('disabled',true);
        $('.PT-Columns-'+col).prop('disabled',true);
        $('.PT-Procedures-'+col).prop('disabled',true);
        $('#objects-'+col).attr('type','text').attr('title','{{"格式"|T}}: {{"用户名@主机名"|T}}。{{"如果不限主机名可以输入: 用户名@%"|T}}').attr('placeholder','{{"用户名@主机名"|T}}').attr('pattern','^[^@]+@[^@]+$').val($('#objects-'+col).data('original'));
        $('#input-database-'+col).prop('required',false);
        $('#input-table-'+col).prop('required',false);
        $('#input-column-'+col).prop('required',false);
        break;
        case '':
        $('#onselect-priv-type-'+col).hide();
        $('#objects-'+col).val('');
        $('#input-database-'+col).prop('required',false);
        $('#input-table-'+col).prop('required',false);
        $('#input-column-'+col).prop('required',false);
        break;
        case 'all':
        $('#onselect-priv-type-'+col).hide();
        $('#objects-'+col).val('*.*');
        $('.PT-Server_Admin-'+col+':disabled').prop('disabled',false);
        $('.PT-Databases-'+col).prop('disabled',true);
        $('.PT-Tables-'+col).prop('disabled',true);
        $('.PT-Columns-'+col).prop('disabled',true);

        $('#input-database-'+col).prop('required',false);
        $('#input-table-'+col).prop('required',false);
        $('#input-column-'+col).prop('required',false);
        break;
        case 'database':
        $('#input-database-'+col).trigger('change');
        $('#onselect-priv-type-'+col).show().find('.table-name,.column-name').hide();
        $('.PT-Server_Admin-'+col).prop('disabled',true);
        $('.PT-Databases-'+col+':disabled').prop('disabled',false);
        $('.PT-Tables-'+col).prop('disabled',true);
        $('.PT-Columns-'+col).prop('disabled',true);
        $('.PT-Procedures-'+col).prop('disabled',false);

        $('#input-database-'+col).prop('required',true);
        $('#input-table-'+col).prop('required',false);
        $('#input-column-'+col).prop('required',false);
        break;
        case 'table':
        $('#input-database-'+col).trigger('change');
        $('#onselect-priv-type-'+col).show().find('.column-name').hide();
        $('#onselect-priv-type-'+col).find('.table-name').show();
        $('.PT-Server_Admin-'+col).prop('disabled',true);
        $('.PT-Databases-'+col).prop('disabled',true);
        $('.PT-Tables-'+col+':disabled').prop('disabled',false);
        $('.PT-Columns-'+col).prop('disabled',true);
        $('.PT-Procedures-'+col).prop('disabled',true);

        $('#input-database-'+col).prop('required',true);
        $('#input-table-'+col).prop('required',true);
        $('#input-column-'+col).prop('required',false);
        break;
        case 'column':
        $('#input-database-'+col).trigger('change');
        $('#onselect-priv-type-'+col).show().find('.table-name,.column-name').show();
        $('.PT-Server_Admin-'+col).prop('disabled',true);
        $('.PT-Databases-'+col).prop('disabled',true);
        $('.PT-Tables-'+col).prop('disabled',true);
        $('.PT-Columns-'+col+':disabled').prop('disabled',false);
        $('.PT-Procedures-'+col).prop('disabled',true);
        
        $('#input-database-'+col).prop('required',true);
        $('#input-table-'+col).prop('required',true);
        $('#input-column-'+col).prop('required',true);
        break;
    }
}).trigger('change');
});
</script>
{{/Block}}